#ifndef VEC2
#define VEC2

template <class T>
class Vec2
{
public:
	Vec2()
	{
		m_x = 0;
		m_y = 0;
	}

	Vec2(T x, T y)
	{
		m_x = x;
		m_y = y;
	}

	Vec2& operator+=(const Vec2& rhs)
	{
		m_x += rhs.m_x;
		m_y += rhs.m_y;
		return *this;
	}

	Vec2& operator-=(const Vec2& rhs)
	{
		m_x -= rhs.m_x;
		m_y -= rhs.m_y;
		return *this;
	}

	Vec2& operator*=(float f)
	{
		m_x *= f;
		m_y *= f;
		return *this;
	}

	bool operator==(const Vec2& rhs)
	{
		return (m_x == rhs.GetX() && m_y == rhs.GetY());
	}


	T GetX() const
	{
		return m_x;
	}

	T GetY() const
	{
		return m_y;
	}

	void SetX(T x)
	{
		m_x = x;
	}

	void SetY(T y)
	{
		m_y = y;
	}


private:
	T m_x;
	T m_y;
};

template <class T>
Vec2<T> operator+(const Vec2<T>& a, const Vec2<T>& b)
{
	Vec2<T> result = a;
	result += b;
	return result;
}

template <class T>
Vec2<T> operator-(const Vec2<T>& a, const Vec2<T>& b)
{
	Vec2<T> result = a;
	result -= b;
	return result;
}

template <class T>
Vec2<T> operator*(const Vec2<T>& a, float f)
{
	Vec2<T> result = a;
	result *= f;
	return result;
}

typedef Vec2<int> Vec2i;
typedef Vec2<float> Vec2f;

#endif